﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;

namespace Toto.Componentes
{
    class Colisao
    {

        public void colidiu(Boneco boneco, Bola pelota)
        {
          
            if (boneco.GetBounding().Intersects(pelota.GetBounding()))
            {
                if (boneco.time) //colisão do time azul                        
                {
                    //bola batendo na parte de cima
                    if (boneco.hitBox.Y >= (pelota.hitBox.Y + pelota.hitBox.Height + 5))
                    {
                        pelota.Direction = new Vector2(pelota.Direction.X, -5);
                    }
                    //bola batendo na diagonal superior ...
                    else if ((boneco.hitBox.Y < (pelota.hitBox.Y + pelota.hitBox.Height + 5))
                    && (boneco.hitBox.Y > (pelota.hitBox.Y + pelota.hitBox.Height * 1 / 3)))
                    {
                        if (pelota.hitBox.X < (boneco.hitBox.X - boneco.hitBox.Width / 2))
                        {   // ... pelo lado esquerdo
                            pelota.Direction = new Vector2(-3, -3);
                        }
                        else
                        {   // ... pelo lado direito
                            pelota.Direction = new Vector2(5, -3);
                        }
                    }
                    //bola batendo no meio ...
                    else if ((boneco.hitBox.Y <= (pelota.hitBox.Y + pelota.hitBox.Height * 1 / 3))
                    && (boneco.hitBox.Y >= (pelota.hitBox.Y - pelota.hitBox.Height * 1 / 3)))
                    {
                        if (pelota.hitBox.X < (boneco.hitBox.X))
                        {   // ... pelo lado esquerdo
                            pelota.Direction = new Vector2(-3, 0);
                        }
                        else
                        {    // ... pelo lado direito
                            pelota.Direction = new Vector2(5, 0);
                        }
                    }
                    //bola batendo na diagonal inferior ...
                    else if ((boneco.hitBox.Y < (pelota.hitBox.Y + pelota.hitBox.Height * 1 / 3))
                    && (boneco.hitBox.Y > (pelota.hitBox.Y - pelota.hitBox.Height + 5)))
                    {
                        if (boneco.hitBox.X < (boneco.hitBox.X - boneco.hitBox.Width / 2))
                        {   // ... pelo lado esquerdo
                            pelota.Direction = new Vector2(-3, +3);
                        }
                        else
                        {   // ... pelo lado direito
                            pelota.Direction = new Vector2(5, +3);
                        }
                    }
                    //bola batendo na parte de baixo
                    else if (boneco.hitBox.Y <= (pelota.hitBox.Y - pelota.hitBox.Height + 5))
                    {
                        pelota.Direction = new Vector2(pelota.Direction.X, +5);
                    }
                }
                else //colisão do time verde                        
                {
                    //bola batendo na parte de cima
                    if (boneco.hitBox.Y >= (pelota.hitBox.Y + pelota.hitBox.Height + 5))
                    {
                        pelota.Direction = new Vector2(pelota.Direction.X, -5);
                    }
                    //bola batendo na diagonal superior ...
                    else if ((boneco.hitBox.Y < (pelota.hitBox.Y + pelota.hitBox.Height + 5))
                    && (boneco.hitBox.Y > (pelota.hitBox.Y + pelota.hitBox.Height * 1 / 3)))
                    {
                        if (pelota.hitBox.X < (boneco.hitBox.X - boneco.hitBox.Width / 2))
                        {   // ... pelo lado esquerdo
                            pelota.Direction = new Vector2(-5, -3);
                        }
                        else
                        {   // ... pelo lado direito
                            pelota.Direction = new Vector2(3, -3);
                        }
                    }
                    //bola batendo no meio ...
                    else if ((boneco.hitBox.Y <= (pelota.hitBox.Y + pelota.hitBox.Height * 1 / 3))
                    && (boneco.hitBox.Y >= (pelota.hitBox.Y - pelota.hitBox.Height * 1 / 3)))
                    {
                        if (pelota.hitBox.X < (boneco.hitBox.X))
                        {   // ... pelo lado esquerdo
                            pelota.Direction = new Vector2(-5, 0);
                        }
                        else
                        {    // ... pelo lado direito
                            pelota.Direction = new Vector2(3, 0);
                        }
                    }
                    //bola batendo na diagonal inferior ...
                    else if ((boneco.hitBox.Y < (pelota.hitBox.Y + pelota.hitBox.Height * 1 / 3))
                    && (boneco.hitBox.Y > (pelota.hitBox.Y - pelota.hitBox.Height + 5)))
                    {
                        if (boneco.hitBox.X < (boneco.hitBox.X - boneco.hitBox.Width / 2))
                        {   // ... pelo lado esquerdo
                            pelota.Direction = new Vector2(-5, +3);
                        }
                        else
                        {   // ... pelo lado direito
                            pelota.Direction = new Vector2(3, +3);
                        }
                    }
                    //bola batendo na parte de baixo
                    else if (boneco.hitBox.Y <= (pelota.hitBox.Y - pelota.hitBox.Height + 5))
                    {
                        pelota.Direction = new Vector2(pelota.Direction.X, +5);
                    }
                }
            }
        }
        
        public void colidiuChute(Boneco boneco,Bola pelota)
        { 
            if (boneco.hitBox.Intersects(pelota.hitBox))
            {
                if (boneco.time) //colisão do time azul                        
                {
                    //bola batendo na parte de cima
                    if (boneco.hitBox.Y >= (pelota.hitBox.Y + pelota.hitBox.Height + 5))
                    {
                        pelota.Direction = new Vector2(pelota.Direction.X, -5);
                        //pelota.speed = pelota.speed + 50;
                    }
                    //bola batendo na diagonal superior ...
                    else if ((boneco.hitBox.Y < (pelota.hitBox.Y + pelota.hitBox.Height + 5))
                    && (boneco.hitBox.Y > (pelota.hitBox.Y + pelota.hitBox.Height * 1 / 3)))
                    {
                        if (pelota.hitBox.X < (boneco.hitBox.X - boneco.hitBox.Width / 2))
                        {   // ... pelo lado esquerdo
                            pelota.Direction = new Vector2(-3, -3);
                            //pelota.speed = pelota.speed + 50;
                        }
                        else
                        {   // ... pelo lado direito
                            pelota.Direction = new Vector2(5, -3);
                            pelota.speed = pelota.speed + 50;
                        }
                    }
                    //bola batendo no meio ...
                    else if ((boneco.hitBox.Y <= (pelota.hitBox.Y + pelota.hitBox.Height * 1 / 3))
                    && (boneco.hitBox.Y >= (pelota.hitBox.Y - pelota.hitBox.Height * 1 / 3)))
                    {
                        if (pelota.hitBox.X < (boneco.hitBox.X))
                        {   // ... pelo lado esquerdo
                            pelota.Direction = new Vector2(-3, 0);
                            //pelota.speed = pelota.speed + 50;
                        }
                        else
                        {    // ... pelo lado direito
                            pelota.Direction = new Vector2(5, 0);
                            pelota.speed = pelota.speed + 50;
                        }
                    }
                    //bola batendo na diagonal inferior ...
                    else if ((boneco.hitBox.Y < (pelota.hitBox.Y + pelota.hitBox.Height * 1 / 3))
                    && (boneco.hitBox.Y > (pelota.hitBox.Y - pelota.hitBox.Height + 5)))
                    {
                        if (boneco.hitBox.X < (boneco.hitBox.X - boneco.hitBox.Width / 2))
                        {   // ... pelo lado esquerdo
                            pelota.Direction = new Vector2(-3, +3);
                            //pelota.speed = pelota.speed + 50;
                        }
                        else
                        {   // ... pelo lado direito
                            pelota.Direction = new Vector2(5, +3);
                            pelota.speed = pelota.speed + 50;
                        }
                    }
                    //bola batendo na parte de baixo
                    else if (boneco.hitBox.Y <= (pelota.hitBox.Y - pelota.hitBox.Height + 5))
                    {
                        pelota.Direction = new Vector2(pelota.Direction.X, +5);
                        //pelota.speed = pelota.speed + 50;
                    }
                }
                else //colisão do time verde                        
                {
                    //bola batendo na parte de cima
                    if (boneco.hitBox.Y >= (pelota.hitBox.Y + pelota.hitBox.Height + 5))
                    {
                        pelota.Direction = new Vector2(pelota.Direction.X, -5);
                        //pelota.speed = pelota.speed + 50;
                    }
                    //bola batendo na diagonal superior ...
                    else if ((boneco.hitBox.Y < (pelota.hitBox.Y + pelota.hitBox.Height + 5))
                    && (boneco.hitBox.Y > (pelota.hitBox.Y + pelota.hitBox.Height * 1 / 3)))
                    {
                        if (pelota.hitBox.X < (boneco.hitBox.X - boneco.hitBox.Width / 2))
                        {   // ... pelo lado esquerdo
                            pelota.Direction = new Vector2(-5, -3);
                            pelota.speed = pelota.speed + 50;
                        }
                        else
                        {   // ... pelo lado direito
                            pelota.Direction = new Vector2(3, -3);
                            //pelota.speed = pelota.speed + 50;
                        }
                    }
                    //bola batendo no meio ...
                    else if ((boneco.hitBox.Y <= (pelota.hitBox.Y + pelota.hitBox.Height * 1 / 3))
                    && (boneco.hitBox.Y >= (pelota.hitBox.Y - pelota.hitBox.Height * 1 / 3)))
                    {
                        if (pelota.hitBox.X < (boneco.hitBox.X))
                        {   // ... pelo lado esquerdo
                            pelota.Direction = new Vector2(-5, 0);
                            pelota.speed = pelota.speed + 50;
                        }
                        else
                        {    // ... pelo lado direito
                            pelota.Direction = new Vector2(3, 0);
                            //pelota.speed = pelota.speed + 50;
                        }
                    }
                    //bola batendo na diagonal inferior ...
                    else if ((boneco.hitBox.Y < (pelota.hitBox.Y + pelota.hitBox.Height * 1 / 3))
                    && (boneco.hitBox.Y > (pelota.hitBox.Y - pelota.hitBox.Height + 5)))
                    {
                        if (boneco.hitBox.X < (boneco.hitBox.X - boneco.hitBox.Width / 2))
                        {   // ... pelo lado esquerdo
                            pelota.Direction = new Vector2(-5, +3);
                            pelota.speed = pelota.speed + 50;
                        }
                        else
                        {   // ... pelo lado direito
                            pelota.Direction = new Vector2(3, +3);
                            //pelota.speed = pelota.speed + 50;
                        }
                    }
                    //bola batendo na parte de baixo
                    else if (boneco.hitBox.Y <= (pelota.hitBox.Y - pelota.hitBox.Height + 5))
                    {
                        pelota.Direction = new Vector2(pelota.Direction.X, +5);
                        //pelota.speed = pelota.speed + 50;
                    }
                }
            }        
        } 
    }
}
